
#ifndef _RADIX_ENGINE_GUI_H_
#define _RADIX_ENGINE_GUI_H_

#include <Engine/Header.h>

_BeginNamespace(Radix)
/*
=================================================================
== Widget
=================================================================
*/
enum WidgetType
{
	eWidgetType_Widget,
	eWidgetType_Text,
	eWidgetType_Image,
	eWidgetType_View
};

class IWidget :public Interface
{
public:
	virtual const String& name() = 0;
	virtual WidgetType type() = 0;

	/*	
	virtual const Vector3& position() = 0;
	virtual void setPosition(const Vector3& pos) = 0;
	virtual void setPosition(real x, real y, real z) = 0;

	virtual const Vector4& orientation() = 0;
	virtual void setOrientation(const Vector3& axis, real angle) = 0;
	virtual void setOrientation(real x, real y, real z, real angle) = 0;

	virtual void translate(const Vector3& t) = 0;
	virtual void rotate(const Vector3& axis, real theta) = 0;
	virtual void scale(const Vector3& factor) = 0;
	*/

	virtual IWidget* parent() = 0;
	virtual IWidget* child(const String& name) = 0;
	virtual IWidget* createChild(const String& name) = 0;
	virtual void deleteChild(const String& name) = 0;
	virtual void deleteChildren() = 0;
};

class IText :public IWidget
{};

class IImage :public IWidget
{};

class IView :public IWidget
{};
/*
=================================================================
== Layout
=================================================================
*/
class ILayout :public Interface
{
public:
	virtual const String& name() = 0;
	virtual const String& type() = 0;
	virtual IWidget* root() = 0;

	virtual void update(real elapsed) = 0;
};
/*
=================================================================
== SceneSystem
=================================================================
*/
class IGuiSystem :public Interface
{
public:
	virtual ILayout* createLayout(const String& name, const String& type) = 0;
	virtual ILayout* selectLayout(const String& name) = 0;
	virtual void deleteLayout(const String& name) = 0;
	virtual void deleteLayout(ILayout* layout) = 0;
	virtual void deleteLayouts() = 0;
};

_EndNamespace(Radix)

#endif//_RADIX_ENGINE_GUI_H_

